package com.chu.dao;

import com.chu.bean.Student;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.List;

public interface StudentDao extends JpaRepository<Student,Integer> {

    //学生姓名查询
    List<Student> findByNameContaining(String name);
    //已知条件：年级编号 查询年级的学生信息
    List<Student> findByGrade_GradeId(int id);


    //根据主键ID查询学生信息(自定义hql语句)
    @Query("from Student where id=?")
    Student findStudentById(int id);


    //根据主键ID和学生姓名查询学生信息(自定义hql语句)
    //hql语法和sql语法一致 但是需要将表名换成类名 列名换成属性名 区分大小写
    //hql查询全部列的时候 要直接用 from 类名
    //通过下标绑定参数
    @Query("from Student where id=?1 and name like ?2")
    Student findStudentByIdAndName(int id,String name);

    //根据主键ID和学生姓名查询学生信息(自定义hql语句)
    //hql语法和sql语法一致 但是需要将表名换成类名 列名换成属性名 区分大小写
    //hql查询全部列的时候 要直接用 from 类名
    //通过名称绑定参数 语法是 :自定义名称
    @Query("from Student where id=:id and name like :name")
    Student findStudentByIdName(@Param("id") int id, @Param("name") String name);

    //关联查询
    //根据年级id查询学生列表
    @Query("from Student where grade.gradeId=:id")
    List<Student> getStudentMakeGradeId(@Param("id") int id);

    //用SQL查询
    @Query(nativeQuery = true,value = "select * from student")
    List<Student> findAllStudent();

    //Modifying 注解通知springData 是一个 update或者delete 操作
    @Modifying
    @Query("update from Student set name=:name where id=:id")
    int updateStudentById(@Param("name")String name,@Param("id")int id);

}
